#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
using ll = long long;
//ll n, m;
//ll check(ll mid,vector<int>&v)
//{
//	ll pos = 0;
//	ll cnt = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		if (pos && v[i] - v[pos] < mid)
//		{
//			continue;
//		}
//		cnt++;
//		pos = i;
//	}
//	return cnt;
//}
//int main()
//{
//	cin >> n >> m;
//	vector<int>v(n, 0);
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> v[i];
//	}
//	sort(v.begin()+ 1, v.end()+ 1);
//	ll left = 0;
//	ll right = 1e9 + 10;
//	while (left + 1 != right)
//	{
//		ll mid = (left + right) >> 1;
//		if (check(mid,v) >= m)
//		{
//			left = mid;
//		}
//		else
//		{
//			right = mid;
//		}
//	}
//	cout << left << endl;
//	return 0;
//}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
using ll = long long;
ll n, m;
//bool check(ll mid,const vector<int>&v)
//{
//	ll pos = 0;
//	ll cnt = 0;
//	for (int i = 0; i < v.size(); i++)
//	{
//		if (v[pos] - v[i] < mid)
//		{
//			continue;
//		}
//		cnt++;
//		pos = i;
//	}
//	if (cnt >= m)
//	{
//		return true;
//	}
//	else
//	{
//		return false;
//	}
//}
//int main()
//{
//	cin >> n >> m;
//	vector<int>v(n, 0);
//	for (int i = 0; i < n; i++)
//	{
//		cin >> v[i];
//	}
//	sort(v.begin(), v.end());
//	ll left = 0;
//	ll right = 1e9 + 10;
//	while (left < right)
//	{
//		ll mid = (left + right + 1) >> 1;
//		if (check(mid,v))
//		{
//			left = mid;
//		}
//		else
//		{
//			right = mid;
//		}
//	}
//	cout << left << endl;
//	return 0;
//}
//#include<iostream>
//#include<vector>
//#include<algorithm>
//using namespace std;
//using ll = long long;
//const ll N = 5e3 + 10;
//ll a[N][N] = { 0 };
//ll b[N * 2] = { 0 };
//ll n, m ,k;
//int main()
//{
//	cin >> n >> m >> k;
//	ll count = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= m; j++)
//		{
//			a[i][j] = i * j;
//			b[count] = a[i][j];
//		}
//	}
//	for (int i = 1; i <= count; i++)
//	{
//		cout << b[i] << " ";
//	}
//	sort(b, b + count);
//	cout << b[k - 1] << endl;
//	return 0;
//}
//#include<iostream>
//#include<vector>
//#include<algorithm>
//using namespace std;
//using ll = long long;
//ll n, m, k;
//ll countLessEqual(ll mid)
//{
//	ll count = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		count += min(m, mid / i);
//	}
//	return count;
//}
//int main()
//{
//	cin >> n >> m >> k;
//	ll left = 1;
//	ll right = n * m;
//	while (left < right)
//	{
//		ll mid = left + (right - left) >> 1;
//		if (countLessEqual(mid) < k)
//		{
//			left = mid + 1;
//		}
//		else
//		{
//			right = mid;
//		}
//	}
//	cout << left << endl;
//	return 0;
//}
//#include<iostream>
//#include<vector>
//#include<string>
//#include<algorithm>
//using namespace std;
//using ll = long long;
//int main()
//{
//	string str;
//	cin >> str;
//	ll count = 0;
//	for (int i = 0; i < str.size(); i++)
//	{
//		if (str[i] == str[str.size() - 1 - i])
//		{
//			count++;
//			if (count == str.size())
//			{
//				cout << "Y" << endl;
//			}
//			else
//			{
//				cout << "N" << endl;
//			}
//		}
//	}
//	return 0;
//}
//#include <iostream>
//#include <vector>
//using namespace std;
//using ll = long long;
//int main()
//{
//	ll n, m, k;
//	cin >> n >> m >> k;
//	vector<int>a(n, 0);
//	for (int i = 0; i < n; i++)
//	{
//		cin >> a[i];
//	}
//	ll left = 0, right = 0, count = 0, result = 0;
//	while (right < n)
//	{
//		if (a[right] >= m)
//		{
//			count++;
//		}
//		while (count >= k)
//		{
//			result += n - right;
//			if (a[left] >= m)
//			{
//				count--;
//			}
//			left++;
//		}
//		right++;
//	}
//	cout << result << endl;
//	return 0;
//}
//#include <iostream>
//#include <vector>
//using namespace std;
//using ll = long long;
//int main()
//{
//	ll n, S;
//	cin >> n >> S;
//	vector<int>a(n, 0);
//	vector<int>m(n, 0);
//	for (int i = 0; i < n; i++)
//	{
//		cin >> a[i];
//	}
//	ll left = 0, right = 1, count = 0, i = 0,temp = 0,result = 0;
//	while (left != n - 1)
//	{
//		temp = S;
//		while (a[left] + a[right] < temp)
//		{
//			temp -= a[right];
//			right++;
//		}
//		count = right - left + 1;
//		//cout << count << endl;
//		result = min(result, count);
//		left++;
//		//cout << left << endl;
//		right = left + 1;
//	}
//	cout << result << endl;
//	return 0;
//}
//#include <iostream>
//#include <vector>
//using namespace std;
//using ll = long long;
//int main()
//{
//	ll n, S;
//	cin >> n >> S;
//	vector<int>a(n, 0);
//	for (int i = 0; i < n; i++)
//	{
//		cin >> a[i];
//	}
//	ll left = 0, right = 0, current_sum = 0, min_length = n + 1;
//	while (right < n)
//	{
//		current_sum += a[right];
//		while (current_sum >= S)
//		{
//			min_length = min(min_length, right - left + 1);
//			current_sum -= a[left];
//			left++;
//		}
//		right++;
//
//	}
//	if (min_length == n + 1)
//	{
//		cout << 0 << endl;
//	}
//	else
//	{
//		cout << min_length << endl;
//	}
//	return 0;
//}
//#include <iostream>
//#include <vector>
//using namespace std;
//using ll = long long;
//int main()
//{
//	ll n, L, R;
//	cin >> n >> L >> R;
//	vector<int>a(n, 0);
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//	}
//	ll cnt = 0, left = 0, right = 1;
//	for (left = 0; left < n - 1; left++)
//	{
//		for (right = left + 1; right < n; right++)
//		{
//			if (a[left] + a[right] <= R && a[left] + a[right] >= L)
//			{
//				cnt++;
//			}
//		}
//	}
//	cout << cnt << endl;
//	return 0;
//}
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
using ll = long long;
//int main()
//{
//	ll n, L, R;
//	cin >> n >> L >> R;
//	vector<int>a(n, 0);
//	for (int i = 0; i < n; i++)
//	{
//		cin >> a[i];
//	}
//	sort(a.begin(), a.end());
//	ll cnt = 0, left = 0, right = 0;
//	for (int i = 0; i < n - 1; i++)
//	{
//		left = i + 1;
//		right = n - 1;
//		while (left <= right)
//		{
//			if (a[left] + a[i] >= L && a[i] + a[right] <= R)
//			{
//				cnt += right - left + 1;
//				break;
//			}
//			else if (a[i] + a[right] > R)
//			{
//				right--;
//			}
//			else
//			{
//				left++;
//			}
//		}
//	}
//	cout << cnt << endl;
//	return 0;
//}
#include<set>
#include <iostream>
#include <vector>
#include<algorithm>
#include<queue>
using namespace std;
using ll = long long;
int main()
{
	ll n, m;
	cin >> n >> m;
	multiset<int>arr;
	for (int i = 0; i < m; i++)
	{
		int temp = 0;
		cin >> temp;
		arr.insert(temp);
	}
	vector<priority_queue<int, vector<int>, less<int>>>v(n);
	ll cnt = 0;
	for (ll i = 0, t; i < n; i++)
	{
		cin >> t;
		cnt = max(cnt, t);
		while (t--)
		{
			int k;
			cin >> k;
			v[i].push(k);
		}
	}
	if (cnt > m)
	{
		cout << -1 << endl;
		return 0;
	}
	ll ans = 0;
	while (cnt--)
	{
		int maxtop = 0;
		int person = 0;
		for (int i = 0; i < n; i++)
		{
			if (v[i].empty())
			{
				continue;
			}
			maxtop = max(v[i].top(), maxtop);
		}
		auto it = lower_bound(arr.begin(), arr.end(), maxtop);
		if (it == arr.end())
		{
			cout << " -1" << endl;
			return 0;
		}
		person = *it;
		arr.erase(it);
		ans += person;
		for (int i = 0; i < n; i++)
		{
			if (v[i].empty())
			{
				continue;
			}
			v[i].pop();
		}
	}
	cout << ans << endl;
	return 0;

}